home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Graphics / WildFire / WildFireFPU / Bonus / draggadget_r0.8 / droptest.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-06-16  |  6.2 KB  |  181 lines

  1. #include "drag.h"
  2. #include <intuition/gadgetclass.h>
  3.  
  4. #include <proto/intuition.h>
  5. #include <proto/exec.h>
  6. #include <proto/icon.h>
  7. #include "proto/drag.h"
  8.  
  9. struct IntuitionBase *IntuitionBase;
  10. struct Library *IconBase;
  11. struct ClassLibrary *DragBase;
  12.  
  13. static ULONG __saveds __asm Dispatcher(register __a0 struct IClass *class,
  14.                                        register __a2 Object *obj,
  15.                                        register __a1 Msg msg );
  16.  
  17. struct ClassLibrary *fstrc;
  18.  
  19. struct IClass *CreateSClass(void)
  20. {
  21.   struct IClass *cl=NULL;
  22.  
  23.   if(fstrc=(struct ClassLibrary*)OpenLibrary("gadgets/string.gadget",40))
  24.     if(cl=MakeClass(NULL,NULL,fstrc->cl_Class,0,0))
  25.       cl->cl_Dispatcher.h_Entry=(HOOKFUNC)Dispatcher;
  26.   return cl;
  27. }
  28.  
  29. void FreeSClass(struct IClass *c)
  30. {
  31.   if(c)
  32.     FreeClass(c);
  33.   if(fstrc)
  34.     CloseLibrary((struct Library*)fstrc);
  35. }
  36.  
  37. main()
  38. {
  39.   struct Gadget *dg1,*dg2;
  40.   struct Gadget *str;
  41.   struct Window *win,*win2=NULL;
  42.   APTR context,dw2;
  43.   struct IntuiMessage *msg;
  44.   struct IClass *dc,*strc=NULL;
  45.   struct DiskObject *icon,*icon2=NULL;
  46.   struct Image *image,*image2,*image3,*image4;
  47.   BOOL done=FALSE;
  48.  
  49.   if(DragBase=(struct ClassLibrary*)OpenLibrary("gadgets/drag.gadget",40))
  50.   {
  51.     dc=DragBase->cl_Class;
  52.  
  53.     if( (IntuitionBase=(struct IntuitionBase*)OpenLibrary("intuition.library",37)) &&
  54.         (IconBase=OpenLibrary("icon.library",37)) &&
  55.         (strc=CreateSClass()) )
  56.     {
  57.       if((win=OpenWindowTags(NULL,WA_Left,100,
  58.                                   WA_Top,100,
  59.                                   WA_Width,200,
  60.                                   WA_Height,120,
  61.                                   WA_Title,(ULONG)"drag&drop-test",
  62.                                   WA_IDCMP,IDCMP_CLOSEWINDOW,
  63.                                   WA_CloseGadget,TRUE,
  64.                                   WA_DragBar,TRUE,
  65.                                   WA_DepthGadget,TRUE,
  66.                                   WA_SimpleRefresh,TRUE,
  67.                                   WA_NoCareRefresh,TRUE,NULL)) &&
  68.         (win2=OpenWindowTags(NULL,WA_Left,320,
  69.                                   WA_Top,120,
  70.                                   WA_Width,200,
  71.                                   WA_Height,80,
  72.                                   WA_Title,(ULONG)"string",
  73.                                   WA_DragBar,TRUE,
  74.                                   WA_DepthGadget,TRUE,
  75.                                   WA_SimpleRefresh,TRUE,
  76.                                   WA_NoCareRefresh,TRUE,NULL)))
  77.       {
  78.         context=CreateDContext(win->WScreen);
  79.         dw2=AddDropWindow(context,2,0,win2,NULL);
  80.  
  81.         if( (icon=GetDiskObject("sys:prefs/locale")) &&
  82.             (icon2=GetDiskObject("sys:prefs/palette")) )
  83.         {
  84.           image=icon->do_Gadget.GadgetRender;
  85.           image2=icon->do_Gadget.SelectRender;
  86.           image3=icon2->do_Gadget.GadgetRender;
  87.           image4=icon2->do_Gadget.SelectRender;
  88.           if(dg1=NewObject(dc,NULL,GA_Left,20,
  89.                                    GA_Top,20,
  90.                                    GA_ID,1,
  91.                                    GA_UserData,(ULONG)"sys:prefs/locale",
  92.                                    DGA_Context,context,
  93.                                    GA_Image,(ULONG)image,
  94.                                    GA_SelectRender,(ULONG)image2,
  95.                                    GA_Highlight,(icon->do_Gadget.Flags) & GFLG_GADGHIGHBITS,
  96.                                    NULL))
  97.           {
  98.             if(dg2=NewObject(dc,NULL,GA_Left,20,
  99.                                      GA_Top,70,
  100.                                      GA_ID,2,
  101.                                      GA_UserData,(ULONG)"sys:prefs/palette",
  102.                                      GA_Previous,(ULONG)dg1,
  103.                                      DGA_Context,context,
  104.                                      GA_Image,(ULONG)image3,
  105.                                      GA_SelectRender,(ULONG)image4,
  106.                                      GA_Highlight,(icon2->do_Gadget.Flags) & GFLG_GADGHIGHBITS,
  107.                                      NULL))
  108.             {
  109.               if(str=NewObject(strc,NULL,GA_Left,20,
  110.                                          GA_Top,40,
  111.                                          GA_Width,140,
  112.                                          GA_Height,19,
  113.                                          GA_ID,3,
  114.                                          STRINGA_TextVal,(ULONG)"",
  115.                                          STRINGA_MaxChars,SG_DEFAULTMAXCHARS-1,
  116.                                          NULL))
  117.               {
  118.                 AddGList(win,dg1,-1,-1,NULL);
  119.                 RefreshGList(dg1,win,NULL,-1);
  120.  
  121.                 AddGList(win2,str,-1,-1,NULL);
  122.                 RefreshGList(str,win2,NULL,-1);
  123.                 while(!done)
  124.                 {
  125.                   WaitPort(win->UserPort);
  126.                   while(msg=(struct IntuiMessage*)GetMsg(win->UserPort))
  127.                   {
  128.                     if(msg->Class==IDCMP_CLOSEWINDOW)
  129.                         done=TRUE;
  130.  
  131.                     ReplyMsg((struct Message*)msg);
  132.                   }
  133.                 }
  134.                 RemoveGList(win,dg1,-1);
  135.                 RemoveGList(win2,str,-1);
  136.  
  137.                 DisposeObject(str);
  138.               }
  139.               DisposeObject(dg2);
  140.             }
  141.             DisposeObject(dg1);
  142.           }
  143.         }
  144.         if(icon) FreeDiskObject(icon);
  145.         if(icon2) FreeDiskObject(icon2);
  146.  
  147.         RemoveDropWindow(dw2);
  148.         DeleteDContext(context);
  149.       }
  150.       if(win)CloseWindow(win);
  151.       if(win2)CloseWindow(win2);
  152.     }
  153.     if(strc) FreeSClass(strc);
  154.     if(IntuitionBase) CloseLibrary((struct Library*)IntuitionBase);
  155.     if(IconBase) CloseLibrary(IconBase);
  156.  
  157.     CloseLibrary((struct Library*)DragBase);
  158.   }
  159. }
  160.  
  161. static ULONG __saveds __asm Dispatcher(register __a0 struct IClass *class,
  162.                                        register __a2 Object *obj,
  163.                                        register __a1 Msg msg )
  164. {
  165.   ULONG ret=DoSuperMethodA(class,obj,msg);
  166.  
  167.   if(msg->MethodID == OM_DROPACTION)
  168.   {
  169.     struct opDropAction *dm=(struct opDropAction*)msg;
  170.     struct TagItem attrs[2];
  171.  
  172.     attrs[0].ti_Tag=STRINGA_TextVal;
  173.     attrs[0].ti_Data=(ULONG)(dm->opda_DragInfo->userdata);
  174.     attrs[1].ti_Tag=NULL;
  175.  
  176.     ret=DoMethod(obj,OM_SET,attrs,dm->opda_GInfo);
  177.   }
  178.  
  179.   return ret;
  180. }
  181.